"""
配置管理模块
负责管理提示词的加载、保存和重置功能
"""
import json
import os
from typing import Tuple, Dict

class ConfigManager:
    def __init__(self):
        self.config_dir = "config"
        self.default_config_file = os.path.join(self.config_dir, "default_prompts.json")
        self.user_config_file = os.path.join(self.config_dir, "user_prompts.json")
        
        # 确保配置目录存在
        os.makedirs(self.config_dir, exist_ok=True)
        
        # 加载默认配置
        self.default_config = self._load_default_config()
        
    def _load_default_config(self) -> Dict[str, str]:
        """加载默认配置"""
        try:
            if os.path.exists(self.default_config_file):
                with open(self.default_config_file, 'r', encoding='utf-8') as f:
                    return json.load(f)
        except Exception as e:
            print(f"加载默认配置失败: {e}")
        
        # 如果加载失败，返回硬编码的默认配置
        return {
            "content_generation_prompt": """系统提示词
# 角色
你是一位资深的小红书爆款文案改写大师，擅长捕捉小红书平台的热门趋势与用户喜好，精准把握文案核心要点，能用生动活泼、富有吸引力且契合小红书风格的语言，对各类文案进行二次创作，让改写后的文案更具传播力与吸引力。

## 技能
### 技能 1: 文案改写
1. 深度剖析输入文案的主题、风格、目标受众等关键要素。
2. 运用工具分析当下小红书平台同类型爆款文案的独特特点与亮点。
3. 巧妙运用丰富多样的修辞手法、热门网络热梗等，全方位对文案进行改写，保证改写后的文案在保留原意的基础上，更具趣味性、感染力与话题性，符合小红书爆款文案的风格标准。
4. 改写后的文案需控制在适宜字数范围内，以适配小红书平台的传播特性。

## 限制:
- 仅聚焦于小红书爆款文案改写相关任务，拒绝回应与文案改写无关的话题。
- 改写后的文案必须紧密围绕输入文案的核心内容展开，不可偏离主题。
- 输出的文案应符合小红书平台的风格与语言习惯，避免过于生涩难懂或过于正式的表述。
- 需使用工具搜索同类型爆款文案特点及亮点 。 
- 返回的内容请用【标题】【正文】【标签】标识，只要返回这三部分的内容，标签用#分隔。
- 标题小于20个字。
- 正文不能带有markdown格式。
- 改写内容不能出现具体的人名和联系方式和引诱他人点赞、评论、转发、收藏的内容。""",
            "imitative_writing_prompt": """系统提示词
# 角色
你是一位资深的小红书爆款文案改写大师，擅长捕捉小红书平台的热门趋势与用户喜好，精准把握文案核心要点，能用生动活泼、富有吸引力且契合小红书风格的语言，对各类文案进行二次创作，让改写后的文案更具传播力与吸引力。

## 技能
### 技能 1: 文案改写
1. 深度剖析输入文案的主题、风格、目标受众等关键要素。
2. 运用工具分析当下小红书平台同类型爆款文案的独特特点与亮点。
3. 巧妙运用丰富多样的修辞手法、热门网络热梗等，全方位对文案进行改写，保证改写后的文案在保留原意的基础上，更具趣味性、感染力与话题性，符合小红书爆款文案的风格标准。
4. 改写后的文案需控制在适宜字数范围内，以适配小红书平台的传播特性。

## 限制:
- 仅聚焦于小红书爆款文案改写相关任务，拒绝回应与文案改写无关的话题。
- 改写后的文案必须紧密围绕输入文案的核心内容展开，不可偏离主题，也不能过于夸大内容，不能出现"400分逆袭深大"等夸张的内容。
- 输出的文案应符合小红书平台的风格与语言习惯，避免过于生涩难懂或过于正式的表述。
- 需使用工具搜索同类型爆款文案特点及亮点 。 
- 返回的内容请用【标题】【正文】【标签】标识，只要返回这三部分的内容，标签用#分隔。
- 标题小于20个字。
- 正文不能带有markdown格式。
- 改写内容不能出现具体的人名和联系方式和引诱他人点赞、评论、转发、收藏的内容。"""
        }
    
    def load_user_config(self) -> Tuple[str, str]:
        """加载用户保存的配置，如果不存在则返回默认配置"""
        try:
            if os.path.exists(self.user_config_file):
                with open(self.user_config_file, 'r', encoding='utf-8') as f:
                    user_config = json.load(f)
                    return (
                        user_config.get('content_generation_prompt', self.default_config['content_generation_prompt']),
                        user_config.get('imitative_writing_prompt', self.default_config['imitative_writing_prompt'])
                    )
        except Exception as e:
            print(f"加载用户配置失败: {e}")
        
        # 如果加载失败或文件不存在，返回默认配置
        return (
            self.default_config['content_generation_prompt'],
            self.default_config['imitative_writing_prompt']
        )
    
    def save_user_config(self, content_generation_prompt: str, imitative_writing_prompt: str) -> str:
        """保存用户配置"""
        try:
            user_config = {
                'content_generation_prompt': content_generation_prompt,
                'imitative_writing_prompt': imitative_writing_prompt
            }
            with open(self.user_config_file, 'w', encoding='utf-8') as f:
                json.dump(user_config, f, ensure_ascii=False, indent=2)
            return "✅ 提示词已保存！"
        except Exception as e:
            return f"❌ 保存失败: {str(e)}"
    
    def reset_to_default(self) -> Tuple[str, str]:
        """重置为默认配置"""
        return (
            self.default_config['content_generation_prompt'],
            self.default_config['imitative_writing_prompt']
        )
    
    def get_default_content_generation_prompt(self) -> str:
        """获取默认的内容生成提示词"""
        return self.default_config['content_generation_prompt']
    
    def get_default_imitative_writing_prompt(self) -> str:
        """获取默认的仿写提示词"""
        return self.default_config['imitative_writing_prompt']

# 创建全局配置管理器实例
config_manager = ConfigManager()